
int n,m;
const int maxn= 1000000;
int isprime[maxn],prime[maxn],pnum=0;
void getprime(int len)
{
	int i,j;
	memset(isprime,0,sizeof(isprime));
	isprime[1]=1;
	pnum=0;
	for(i=2 ; i<=len; i++)
	{
		if(!isprime[i])	prime[pnum++]=i;//0到pnum-1个
		for(j=0; j<pnum && prime[j]*i<=len; j++)
		{
			isprime[prime[j]*i]=1;
			//if(i%prime[j]==0)	break;
		}
	}
}
int yin[maxn],yinid,yinnum[maxn],yue[maxn],yueid;//约数是从0到yueid-1;
void dfs_yue(int x,int y)
{
	if(x>=yinid) 
	{
		yue[yueid++]=y;
		return ;
	}
	int i,j;
	int now=1;
	for(j=0; j<=yinnum[x]; j++)
	{
		dfs_yue(x+1,y*now);
		now*=yin[x];
	}
}
void get_yue(int x)
{
	int i,t=x,y;
	yinid=0;
	yueid=0;
	for(i=0; i<pnum; i++)
	{
		if(t%prime[i]==0)
		{	
			y=0;
			
			while(t%prime[i]==0)
			{
				y++;
				t/=prime[i];
			}
			yin[yinid]=prime[i];
			yinnum[yinid++]=y;
		}
		if(t==1)break;
	}
	if(t!=1)//素数大于素数表的情况特判
	{
		yin[yinid]=t;
		yinnum[yinid++]=1;
	}
	dfs_yue(0,1);//约数没有排序 
}
int main()
{
	int i,j,k;
		getprime(10000);
		
		get_yue(i);
}
